package com.bjsxt;
/**泛型
 * 本质是“数据类型的参数化”，自己的数据类型不是固定的，而是可以作为参数传入。
 我们可以把“泛型”理解为数据类型的占位符（类似形式参数），即告诉编辑器，在调用泛型时必须传实
 际类型，这种参数类型可以用在类、接口方法中，分别被称为泛型类、泛型接口、泛型方法
 *泛型类就是把泛型定义在类上，用户使用该类的时候，才把类型明确下来。泛型类的具体使用方法
 是在类的名称后添加一个或多个类型参数声明，如<T>   <T,K,V>
 * 语法结构：public class 类名<泛型表示符号>
 *  */
/*参数化类型，白话说就是：
* 1，把类型当作是参数一样传递
* 2，<数据类型>只能是引用类型*/
 /*类型擦除
 * 编码时采用泛型写的类型参数，编译器会编译时去掉，这称为“类型擦除”
 * 泛型主要用于编译阶段，编译后生成的字节码class文件不包含泛型中的类型信息，涉及类型
 * 转换仍然是普通的强制类型转换。类型参数在编译后会被替换成Object，运行时虚拟机并不知道泛型*/
    //泛型主要是方便了程序员的代码编写，以及更好的安全性检测

/*定义泛型：泛型字符可以是任何标识符，一般采用几个标记：E,T,K,V,N,?
* E  Element  在容器中使用，表示容器中的元素
* T  Type   表示普通的java类
* V  Value  表示值
* K  Key    表示键，例如：Map中的建Key
* N  Number  表示数值类型
* ？          表示不确定的Java 类型*/


public class Generic<T> {  //在类里定义泛型，成员变量与方法都是泛型
    private T flag;

    public void setFlag(T flag){ //方法没返回值 有形参 的泛型
        this.flag=flag;
    }

    public T getFlag(){  //方法有返回值中的有泛型  在修饰符后加 T
        return this.flag;
    }
}
